//引入qs 进行数据转换
// import qs from "qs";

// 此vm参数为页面的实例，可以通过它引用vuex中的变量
// module.exports = (vm) => {
const {tokenExpShowModal} = require("@/config/util/common");
module.exports = (vm) => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		// config.baseURL = 'http://localhost:8080'; /* 根域名 */
		// config.baseURL = 'http:///192.168.1.7:8080'; /* 根域名 */
		config.baseURL = 'http:///150.158.162.173:8080'; /* 根域名 */
		//默认头部
		config.header = {
			"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
		}
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		// if (config?.custom?.auth) {
		if (uni.getStorageSync('token')) {
			// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
			// config.header.token = uni.getStorageSync('token')
			config.header.Authorization = "Bearer "+ uni.getStorageSync('token')
		}


		//设置头部并且转换数据
		// let header = config.header;
		// if (header["Content-Type"] === "multipart/form-data") {
		// 	//文件上传，数据无需处理
		// } else if (header["Content-Type"] === "application/json") {
		// 	// json数据转换
		// 	config.params = JSON.stringify(config.params);
		// } else {
		// 	//利用 qs进行转换
		// 	config.params = qs.stringify(config.params, {
		// 		indices: false
		// 	});
		// }

		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data
		console.log("--------------------响应的数据:", data);

		//判断返回结果code是否是 401 , 拒绝访问。
		// 是的话，去除本地无用的token, 再咨询用户是否需要重新登录。
		if(data.code === 401){
			console.log("--------401:", data);
			tokenExpShowModal(true)
			return Promise.reject(response);
		}

		//不需要弹窗提示的错误：定位获取城市失败
		if(data.code === 700){
			return Promise.reject(response)
		}

		//错误信息提示
		if(data.code !== 200){
			uni.$u.toast(data.msg);
			return Promise.reject(response)
		}
		return data;
		// return Promise.resolve(data);

		// // 自定义参数
		// const custom = response.config?.custom
		// if (data.code !== 200) {
		// 	// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
		// 	if (custom.toast !== false) {
		// 		uni.$u.toast(data.message)
		// 	}

		// 	// 如果需要catch返回，则进行reject
		// 	if (custom?.catch) {
		// 		return Promise.reject(data)
		// 	} else {
		// 		// 否则返回一个pending中的promise，请求不会进入catch中
		// 		return new Promise(() => { })
		// 	}
		// }
		// return data.data === undefined ? {} : data.data
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response)
	})
}
